package com.automation.ljf.util;

import lombok.Data;
import lombok.experimental.Accessors;

import java.util.HashMap;
import java.util.Map;

@Data
@Accessors(chain = true)
public class ResultMessage {

    /**
     * 状态码 101表示成功，102表示失败
     */
    private Integer code;

    /**
     * 相应信息
     */
    private String message;

    /**
     * 封装数据
     */
    private Map<String, Object> data = new HashMap<>();

    /**
     * 操作成功的状态
     * @param message  信息
     * @return  R对象
     */
    public static ResultMessage ok(String message){
        ResultMessage resultMessage = new ResultMessage();
        resultMessage.setCode(200);
        resultMessage.setMessage(message);
        return resultMessage;
    }

    public static ResultMessage ok(Integer code, String message){
        ResultMessage resultMessage = new ResultMessage();
        resultMessage.setCode(code);
        resultMessage.setMessage(message);
        return resultMessage;
    }

    /**
     * 无message的成功状态
     * @return
     */
    public static ResultMessage ok(){
        return ok("");
    }


    /**
     * 操作失败的状态
     * @param message  信息
     * @return  R对象
     */
    public static ResultMessage error(String message){
        ResultMessage resultMessage = new ResultMessage();
        resultMessage.setCode(400);
        resultMessage.setMessage(message);
        return resultMessage;
    }

    public static ResultMessage error(Integer code, String message){
        ResultMessage resultMessage = new ResultMessage();
        resultMessage.setCode(code);
        resultMessage.setMessage(message);
        return resultMessage;
    }

    /**
     * 无message的失败状态
     * @return
     */
    public static ResultMessage error(){
        return error("");
    }

    /**
     * 自定义返回状态
     * @param code  状态码
     * @param message   信息
     * @return  R实例
     */
    public static ResultMessage r(Integer code, String message){
        ResultMessage resultMessage = new ResultMessage();
        resultMessage.setCode(code);
        resultMessage.setMessage(message);
        return resultMessage;
    }

    /**
     * 链式增加data数据的方法
     * @param key   数据的键
     * @param value 数据的值
     * @return  R对象
     */
    public ResultMessage addData(String key, Object value){
        this.data.put(key, value);
        return this;
    }

}
